STATIC, part of TestWorks' fully integrated STW/Advisor performs a more detailed error check than a compiler, including locating non-portable constructs. It also looks at the entire program to find inconsistencies across the modules that comprise an application. This is especially important in multi-programmer projects.

STATIC processes a source code file or multiple files and generates a report of more than 300 possible syntactical, warning and informational messages.

STATIC has been designed to cope with the potential avalanche of messages. The report can be easily customized to fit organization unique programming styles with the following types of options: control options enable and/or disable messages individually, or in groups, by symbol name, or by type difference; flag options handle data types and syntax errors; size options sets the sizes of various scalars (short, int) for a target machine; compiler options disregard nonstandard constructs.

STATIC allows programmers to decide on the degree of checking that is necessary and focus on a single type or error, if they wish.

STATIC detects an extensive list of bugs: inter-module type inconsistencies; function parameter mismatches in number or in type, in the same module or across multiple modules; value return inconsistencies for functions (information is gleaned from return statements, calls and, optionally, declarations); used but not initialized errors (for auto, static and global variables, arrays and structs); declared but not used; used but not defined; unreachable code; assigned but not accessed (for auto, static and global variables, arrays and structs); unusual uses of Boolean as in:

flags & 4 == 0

(the programmer thought that & had a higher precedence than ==; it does not);

constant Booleans as in:

if ( x = 0 ) ...

(this ex-Pascal programmer thought he was testing for x being 0);

indentation checking; pre-processing anomalies; suspicious uses of semi-colons as in:

if (a>b);

strict and loose enumeration checking; order of evaluation errors, as in:

a[i] = i++;

wide variety of loss of precision errors such as int to char featuring our exclusive precision checking; excessive shift values; loss of sign; suspicious casts; mixing signed and unsigned quantities; comment within comments; pointer irregularities such as an increase in pointer capability and returning pointers to auto; ANSI `Quiet Changes'; unusual compile-time objects, including macros, typedefs, declarations, structs, unions, enums; header files not used; externals that can be made static; declarations that can be off-loaded from headers; name clashes within first count characters; one declaration hiding another; strong type checking options support full or partial typedef-based type checking.